home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
program
/
168
/
lorder.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-03-31
|
2KB
|
103 lines
/* check the library ordering */
#include "stdio.h"
int last_def;
char word[100];
main(argc, argv) char *argv[]; {
int i;
char *getword();
FILE *fp;
if ((fp = fopen(argv[1], "r")) == NULL) {
printf("can't open %s\n", argv[1]);
exit(0);
}
while (getword(fp, word)) {
if (strcmp(word, ":") == 0) {
define(getword(fp, word));
}
else if (strcmp(word, "jsr") == 0) {
use(getword(fp, word));
}
else if (word[0] == 'l' && word[1] == 'g') {
use(getword(fp, word));
}
else if (word[0] == 's' && word[1] == 'g') {
getword(fp, word);
use(getword(fp, word));
}
}
}
char *
getword(fp, s) FILE *fp; char *s; {
int c;
char *r = s;
c = getc(fp);
while (c != EOF && c <= ' ')
c = getc(fp);
if (c == EOF) return NULL;
while (c != EOF && c > ' ') {
*s++ = c;
c = getc(fp);
}
*s = 0;
return r;
}
#define S_NIL 0
#define MAXSYM 10000
#define MAXSPC 20000 /* max symbol space */
char sym[MAXSPC]; /* space for symbols */
int lsym = 0; /* end of symbol space */
char *symptr[MAXSYM]; /* pointer to the symbol string */
int symtype[MAXSYM]; /* type of the symbol */
int symval[MAXSYM]; /* value of a symbol */
lookup(nm) char *nm; {
int i, start;
start = i = *nm;
while (symptr[i]) {
if (strcmp(nm, symptr[i]) == 0) return i;
i++;
if (i == MAXSYM) i = 0;
if (i == start) {
fprintf(stderr, "symbol table full");
return 0;
}
}
symptr[i] = &sym[lsym];
while (sym[lsym++] = *nm++)
;
sym[lsym++] = 0;
symtype[i] = symval[i] = 0;
if (lsym >= MAXSPC) {
fprintf(stderr, "symbol space full");
return 0;
}
return i;
}
define(s) char *s; {
int id;
if (s != NULL) {
/* printf("define %s\n", s); */
last_def = id = lookup(s);
symval[id] = 1;
}
}
use(s) char *s; {
int id;
if (s != NULL) {
/* printf(" using %s in %s\n", s, symptr[last_def]); */
id = lookup(s);
if (symval[id])
printf("%s should come after %s\n",
s, symptr[last_def]);
}
}